#include <opencv2/opencv.hpp>
#include <iostream>

int main(int argc, char ** argv) {
    
    cv::Mat m = cv::imread(argv[1]);
    if (m.empty()) {
        std::cout << "no image file!" << std::endl;
        return -1;
    }

    std::vector<cv::Mat> mats;
    // cv::Mat * mats;  // 指针表示出错
    cv::split(m, mats);

    // a
    cv::Mat green = mats[1];
    cv::imshow("Green", green);

    // b
    cv::Mat clone1, clone2;
    clone1 = green.clone();
    clone2 = green.clone();

    // c
    double max, min;
    int maxId, minId;
    cv::minMaxIdx(green, &min, &max, &minId, &maxId);

    // d
    double thresh = (uchar) ((max - min) / 2.0);
    int ithresh = (int)thresh;
    clone1 = cv::Mat(clone1.size(), clone1.type(), cv::Scalar(ithresh));

    // e
    clone2.setTo(cv::Scalar(0));
    cv::compare(green, clone1, clone2, cv::CMP_GE);

    // f
    cv::subtract(green, thresh/2, green, clone2);
    cv::imshow("Clone2", clone2);


    cv::waitKey(-1);
    return 0;
}